﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FONCREAGROINTEGRAL.Models;
using Microsoft.Reporting.WebForms;

namespace FONCREAGROINTEGRAL.Controllers
{
    public class adelantoController : Controller
    {
        public SistIntFoncreagroEntities entidades = new SistIntFoncreagroEntities();
        //
        // GET: /adelanto/

        //Se Pasa el IdPresonal
        public ActionResult Index(int id)
        {
            var query = entidades.PRESTADELDSCTOes.
                Join(entidades.PERIODOLABORALs, a => a.IdPeriodoLaboral, pl => pl.IdPeriodoLaboral, (a, pl) => new { 
                a.IdPrestAdelDscto,a.monto,a.Fechasolicitud,a.Fechaaprobacion,a.AutorizadoPor,pl.IdPersonal,a.tipo,a.aprobado})
                .Where(ad => ad.IdPersonal == id);

            var result = (from ad in query.ToList()
                          join cu in entidades.CUOTAs on ad.IdPrestAdelDscto equals cu.IdPrestAdelDscto
                          join em in entidades.EJERCICIOMES on cu.idejerciciomes equals em.idejerciciomes
                          join ea in entidades.EJERCICIOs on em.IdEjercicio equals ea.IdEjercicio
                          where ad.tipo == 1
                          select new { 
                          Id = ad.IdPrestAdelDscto,
                          FechaS = string.Format("{0:d}",ad.Fechasolicitud),
                          FechaE = string.Format("{0:d}", ad.Fechaaprobacion),
                          Monto = cu.Monto,
                          Periodo = Convert.ToString(ea.Anio)+" - Mes :  " +mesencadena(Convert.ToInt32(em.mes)),
                          Aprobado = ad.aprobado
                          }).ToList();

            return Json(new { grid = result,total = query.Count()},JsonRequestBehavior.AllowGet);
        }

        public string mesencadena(int id)
        {
            var mes = "";
            switch (id)
            {
                case 1: mes = "Enero"; break;
                case 2: mes = "Febrero"; break;
                case 3: mes = "Marzo"; break;
                case 4: mes = "Abril"; break;
                case 5: mes = "Mayo"; break;
                case 6: mes = "Junio"; break;
                case 7: mes = "Julio"; break;
                case 8: mes = "Agosto"; break;
                case 9: mes = "Setiembre"; break;
                case 10: mes = "Octubre"; break;
                case 11: mes = "Noviembre"; break;
                case 12: mes = "Diciembre"; break;

            }
            return mes;
        }

        //id ==== idejerciciomes
        public ActionResult Report(int id)
        {

 
                LocalReport localReport = new LocalReport();

                localReport.ReportPath = Server.MapPath("~/Content/Reportes/RCARTAPRESTADELDSCTO.rdlc");
                ReportDataSource reportDataSource = new ReportDataSource("RCARTAPRESTADELDSCTO", entidades.RCARTAPRESTADELDSCTO(id).ToList());


                localReport.DataSources.Add(reportDataSource);
                string reportType = "PDF";
                string mimeType;
                string encoding;
                string fileNameExtension;
                string deviceInfo =
                    "<DeviceInfo>" +
                "  <OutputFormat>PDF</OutputFormat>" +
                "  <PageWidth>8.27in</PageWidth>" +
                "  <PageHeight>11.69in</PageHeight>" +
                "  <MarginTop>0in</MarginTop>" +
                "  <MarginLeft>0in</MarginLeft>" +
                "  <MarginRight>0in</MarginRight>" +
                "  <MarginBottom>0in</MarginBottom>" +
                "</DeviceInfo>";
                Warning[] warnings;
                string[] streams;
                byte[] renderedBytes;
                renderedBytes = localReport.Render(
                    reportType,
                    deviceInfo,
                    out mimeType,
                    out encoding,
                    out fileNameExtension,
                    out streams,
                    out warnings);
                Response.Clear();
                Response.ContentType = mimeType;
                Response.AddHeader("content-disposition", "attachment; filename=Carta." + fileNameExtension);
                Response.BinaryWrite(renderedBytes);
                Response.End();
                return File(renderedBytes, mimeType);

                //return Content("OK");
            //0 error
            //1 mes aun no pagado
        }

        //
        // GET: /adelanto/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /adelanto/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /adelanto/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection, PRESTADELDSCTO PRESTADELDSCTO)
        {
            try {
                int idpersonal = Convert.ToInt32(Request.Params["idpersonal"]);
                
                var ejm = entidades.EJERCICIOMES.Single(em => em.vigente == true);

                //OBTENEMOS EL AREA DEL PERSONAL
                //var posper = entidades.POSICIONPERSONAs
                //    .Join(entidades.POSICIONs, posp => posp.IdPosicion, pos => pos.IdPosicion, (posp, pos) => new {
                //    posp.estado,posp.IdPersonal,pos.IdArea})
                //    .Single(posp => posp.estado == true && posp.IdPersonal == idpersonal);

                ////JEFE DE AREA
                //var jea = entidades.POSICIONPERSONAs
                //    .Join(entidades.POSICIONs,posp => posp.IdPosicion,pos=>pos.IdPosicion,(posp,pos) => new {
                //    posp.estado,pos.IdCargo,pos.IdArea,posp.IdPersonal})
                //    .Single(posp => posp.estado == true && posp.IdCargo == 5 && posp.IdArea == posper.IdArea);

                try
                {
                    // TODO: Add insert logic here
                    if (ModelState.IsValid)
                    {
                        //de 7
                        var cadelanto = new PRESTADELDSCTO();
                        cadelanto.tipo = 1;
                        cadelanto.aprobado = false;
                        cadelanto.cuotas = 1;
                        cadelanto.Fechasolicitud = DateTime.Now;
                        TryUpdateModel(cadelanto, collection.ToValueProvider());
                        //entidades.Rdesactivarcontratoadenda(ccontrato.IdPersonal);
                        entidades.AddToPRESTADELDSCTOes(cadelanto);
                        entidades.SaveChanges();

                        entidades.RDISTRIBUIRCUOTAS(1, Convert.ToInt32(cadelanto.IdPrestAdelDscto), cadelanto.monto, Convert.ToInt32(ejm.idejerciciomes));
                        return Content("OK");
                    }
                    return View();
                    //return RedirectToAction("Index");
                }
                catch
                {
                    return View();
                }            
            }
            catch {
                return Content("Error No tieme Mes Vigente Activo");
            }
            
        }
        
        //
        // GET: /adelanto/Edit/5

        public ActionResult Edit(int id)
        {
            var eprestamo = entidades.PRESTADELDSCTOes.Single(ed => ed.IdPrestAdelDscto == id);
            return View(eprestamo);
        }

        //
        // POST: /adelanto/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            var eprestamo = entidades.PRESTADELDSCTOes.Single(ed => ed.IdPrestAdelDscto == id);
            try
            {
                // TODO: Add update logic here
                if (ModelState.IsValid)
                {
                    var ejm = entidades.EJERCICIOMES.Single(em => em.vigente == true);
                    TryUpdateModel(eprestamo);
                    entidades.SaveChanges();
                    entidades.RDISTRIBUIRCUOTAS(eprestamo.cuotas, Convert.ToInt32(eprestamo.IdPrestAdelDscto), eprestamo.monto, Convert.ToInt32(ejm.idejerciciomes));
                    return Content("OK");
                }
                return View(eprestamo);
            }
            catch
            {
                return View(eprestamo);
            }
        }

        //
        // GET: /adelanto/Delete/5
 
        public ActionResult Delete(int id)
        {
            return View();
        }

        //
        // POST: /adelanto/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        public ActionResult Aprobar(int id)
        {
            var edescuento = entidades.PRESTADELDSCTOes.Single(ed => ed.IdPrestAdelDscto == id);
            return View(edescuento);
        }

        [HttpPost]
        public ActionResult Aprobar(int id, FormCollection collection, HttpPostedFileBase adjunto)
        {

            var edescuento = entidades.PRESTADELDSCTOes.Single(ed => ed.IdPrestAdelDscto == id);
            int autorizador = Convert.ToInt32(collection["autorizador"]);

            //return Content(autorizador.ToString());

            if (autorizador > 0)
            {

                try
                {
                    // TODO: Add update logic here
                    if (ModelState.IsValid)
                    {
                        string grupos = "";
                        if (adjunto != null)
                        {
                            grupos = adjunto.FileName.ToString();
                            if (grupos.EndsWith(".pdf") || grupos.EndsWith(".PDF"))
                            {
                                adjunto.SaveAs(Server.MapPath("~/Content/RRHH/Prestamo/") + Convert.ToString(edescuento.IdPrestAdelDscto) + ".pdf");
                            }
                            else
                            {
                                ViewData["ERRORDSCTO"] = "Seleccione Documento PDF";
                                return View(edescuento);
                            }
                        }
                        /*else
                        {
                            ViewData["ERRORDSCTO"] = "Es Necesario Adjuntar Documento De Sustento";
                            return View(edescuento);
                        }*/

                        edescuento.aprobado = true;
                        edescuento.Fechaaprobacion = DateTime.Now;
                        edescuento.AutorizadoPor = Convert.ToInt32(autorizador);

                        TryUpdateModel(edescuento);
                        entidades.SaveChanges();
                        return Content("OK");
                    }
                    return Content("Datos Invalidos");
                    //return View(edescuento);
                }
                catch
                {
                    return Content("Error procesando los datos");

                    //return View(edescuento);
                }
            }
            else
            {
                //ViewData["ERRORDSCTO"] = "Error en el envio de datos";
                return Content("Error en el envio de datos");
            }
        }
    }
}
